﻿/* jQuery Session vars v.0.3
* by Jay Salvat
* http://www.jaysalvat.com
* -----------------------------------------------
* Inspired by an idea from Mario Heiderich
* http://code.google.com/p/quipt/
* -----------------------------------------------
* Requires jquery.json.js by DeadWisdom
* http://code.google.com/p/jquery-json/
* -----------------------------------------------
* CHANGELOG
* 0.3 -- 11-JUL-08
* Security improvements
* Calling manually sessionStart and sessionStop is not required anymore
* Window.name is keept between pages
* 0.2 -- 10-JUL-08
* Now works with functions, objects and arrays
* 0.1 -- 08-JUL-08
* First draft
* -----------------------------------------------
* USAGE
* - To Store
* $(function() {
*      $.session("myVar, "value");
* });
* 
* - To Read
* $(function() {
*      alert( $.session("myVar) );     
* });
*/
(function ($) {
    var sessionData = {};
    var windowName = "";
    var domain = location.href.match(/\w+:\/\/[^\/]+/)[0];
    var referrer = (document.referrer) ? document.referrer.match(/\w+:\/\/[^\/]+/)[0] : "";

    if (referrer == "" || referrer !== domain) {
        window.name = window.name.replace("#" + domain + "#", "");
    }

    function loadData() {
        stored = window.name.split("#" + domain + "#");
        windowName = window.name = stored[0];
        if (data = stored[1]) {
            $.each(data.split(";"), function (i, data) {
                parts = data.split("=");
                varName = parts[0];
                varValue = unescape(parts[1]);
                sessionData[varName] = varValue;
            });
        }
    }

    function saveData() {
        var dataToStore = windowName + "#" + domain + "#";
        $.each(sessionData, function (varName, varValue) {
            if (varName && varValue) {
                dataToStore += (varName + "=" + escape(varValue) + ";");
            }
        });
        window.name = dataToStore;
    }

    $.session = function (name, value) {
        if (value) {
            if ($.isFunction(value)) {
                value = value();
            }
            if ($.toJSON) {
                sessionData[name] = $.toJSON(value);
            } else {
                sessionData[name] = value;
            }
        } else {
            if ($.evalJSON) {
                return $.evalJSON(sessionData[name]);
            } else {
                return sessionData[name];
            }
        }
    }

    $.sessionStop = function () {
        saveData();
    }

    $.sessionStart = function () {
        loadData();
    }

    $.sessionStart();
    window.onunload = function () { $.sessionStop(); };

})(jQuery);